package com.tenthoundsqps.controller;

import com.tenthoundsqps.entity.Order;
import com.tenthoundsqps.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 订单控制器
 * 处理所有订单相关的HTTP请求
 * 
 * 提供以下核心功能：
 * 1. 订单详情查询
 * 2. 订单列表查询
 * 3. 订单搜索（手机号、商户名）
 * 4. 归档订单查询
 */
@RestController
@RequestMapping("/api/orders")
public class OrderController {
    
    /**
     * 订单服务接口
     * 注入订单相关业务逻辑
     */
    @Autowired
    private OrderService orderService;
    
    /**
     * 根据订单ID查询订单详情
     * GET /api/orders/{id}
     * 
     * @param id 订单ID
     * @return 订单信息
     */
    @GetMapping("/{id}")
    public Order getOrderById(@PathVariable Long id) {
        return orderService.getOrderById(id);
    }
    
    /**
     * 根据订单号查询订单详情
     * GET /api/orders/no/{orderNo}
     * 
     * @param orderNo 订单编号
     * @return 订单信息
     */
    @GetMapping("/no/{orderNo}")
    public Order getOrderByNo(@PathVariable String orderNo) {
        return orderService.getOrderByNo(orderNo);
    }
    
    /**
     * 根据用户ID查询订单列表
     * GET /api/orders/user/{userId}?limit=10
     * 
     * @param userId 用户ID
     * @param limit 限制返回订单数量，默认10条
     * @return 订单列表
     */
    @GetMapping("/user/{userId}")
    public List<Order> getOrdersByUserId(@PathVariable Long userId, 
                                         @RequestParam(defaultValue = "10") int limit) {
        return orderService.getOrdersByUserId(userId, limit);
    }
    
    /**
     * 根据手机号查询订单
     * GET /api/orders/search/phone/{phone}?limit=10
     * 
     * @param phone 手机号
     * @param limit 限制返回订单数量，默认10条
     * @return 订单列表
     */
    @GetMapping("/search/phone/{phone}")
    public List<Order> searchOrdersByPhone(@PathVariable String phone,
                                           @RequestParam(defaultValue = "10") int limit) {
        return orderService.searchOrdersByPhone(phone, limit);
    }
    
    /**
     * 根据商户名称查询订单
     * GET /api/orders/search/merchant/{merchantName}?limit=10
     * 
     * @param merchantName 商户名称
     * @param limit 限制返回订单数量，默认10条
     * @return 订单列表
     */
    @GetMapping("/search/merchant/{merchantName}")
    public List<Order> searchOrdersByMerchantName(@PathVariable String merchantName,
                                                  @RequestParam(defaultValue = "10") int limit) {
        return orderService.searchOrdersByMerchantName(merchantName, limit);
    }
    
    /**
     * 获取归档订单（冷数据查询）
     * GET /api/orders/archived/user/{userId}?limit=10
     * 
     * @param userId 用户ID
     * @param limit 限制返回订单数量，默认10条
     * @return 归档订单列表
     */
    @GetMapping("/archived/user/{userId}")
    public List<Order> getArchivedOrdersByUserId(@PathVariable Long userId,
                                                 @RequestParam(defaultValue = "10") int limit) {
        return orderService.getArchivedOrdersByUserId(userId, limit);
    }
}